﻿create procedure [dbo].[spDatVe]
@MaDatCho int, 
@MaKH int,
@MaChuyenBayDi int,
@MaChuyenBayVe int,
@MaHangGhe int,
@LoaiVe int
as
declare
@SoChuyenBayDi int,
@SoChuyenBayVe int,
@MaViTri int
begin
	Set @MaViTri = 0;
	begin tran
	--Kiểm tra mã chuyến bay đi có tồn tại hay không
		set @SoChuyenBayDi = (select count(*) from dbo.ChuyenBay where MaChuyenBay = @MaChuyenBayDi)
		if (@SoChuyenBayDi = 0)
		begin
			rollback tran
			return 0
		end
		--Tìm vị trí ứng với hạng ghế còn trống
		set @MaViTri = (select top 1 MaViTri from ViTri where ChuyenBay = @MaChuyenBayDi and HangGhe = @MaHangGhe and TinhTrang = 'trong')
		if (@MaViTri = 0)
		begin
			rollback tran
			return 0
		end
		--Tiến hành đặt vé cho khách hàng cho chuyến bay đi
		insert into Ve ([MaGiuCho], [MaKhachHang], [MaChuyenBay] ,[MaViTri], [MaLoaiVe], [TinhTrang]) values (@MaDatCho, @MaKH, @MaChuyenBayDi, @MaViTri, @LoaiVe, 'da dat') 
		if (@@ERROR<>0)
		begin
			rollback tran
			return 0
		end
		--Cập nhật lại tình trạng vị trí
		update ViTri set TinhTrang = 'da duoc dat' where MaViTri = @MaViTri
		if (@@ERROR<>0)
		begin
			rollback tran
			return 0
		end
		--Cập nhật lại số vị trí trống trong của hạng ghế và chuyến bay tương ứng
		update DanhSachHangGhe set SoViTriConTrong = SoViTriConTrong - 1 where MaChuyenBay = @MaChuyenBayDi and MaHangGhe = @MaHangGhe
		if (@@ERROR<>0)
		begin
			rollback tran
			return 0
		end
---------insert nếu có chuyến bay về
		if(@MaChuyenBayVe <= 0)
		begin
			commit tran
			return 1
		end
		--Kiểm tra chuyến bay về có tồn tại không
		set @SoChuyenBayVe = (select count(*) from dbo.ChuyenBay where MaChuyenBay = @MaChuyenBayVe)
		if (@SoChuyenBayVe = 0)
		begin
			rollback tran
			return 0
		end
		--Tìm vị trí ứng với hạng ghế còn trống
		set @MaViTri = (select top 1 MaViTri from ViTri where ChuyenBay = @MaChuyenBayVe and HangGhe = @MaHangGhe and TinhTrang = 'trong')
		if (@MaViTri = 0)
		begin
			rollback tran
			return 0
		end
		--Tiến hành đặt vé cho khách hàng cho chuyến bay về
		insert into Ve ([MaGiuCho], [MaKhachHang], [MaChuyenBay] ,[MaViTri], [MaLoaiVe], [TinhTrang]) values (@MaDatCho, @MaKH, @MaChuyenBayVe, @MaViTri, @LoaiVe, 'da dat')
		if (@@ERROR<>0)
		begin
			rollback tran
			return 0
		end
		--Cập nhật lại tình trạng vị trí
		update ViTri set TinhTrang = 'da duoc dat' where MaViTri = @MaViTri
		if (@@ERROR<>0)
		begin
			rollback tran
			return 0
		end
		--Cập nhật lại số vị trí trống trong của hạng ghế và chuyến bay tương ứng
		update DanhSachHangGhe set SoViTriConTrong = SoViTriConTrong - 1 where MaChuyenBay = @MaChuyenBayVe and MaHangGhe = @MaHangGhe
		if (@@ERROR<>0)
		begin
			rollback tran
			return 0
		end
	commit tran
	return 1
end


